package com.hospital.serviceImpl;

import com.hospital.dao.UserRoleMapper;
import com.hospital.entity.User;
import com.hospital.entity.UserRoleVo;
import com.hospital.service.UserRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class UserRoleServiceImpl implements UserRoleService {
    @Autowired
    private UserRoleMapper userRoleMapper;

    /**
     * 查所有用户对应的所有权限
     *
     * @return 集合中用户对应的角色与权限
     */
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
    @Override
    public List<User> SelectAll(Integer page, Integer pageNum) {
        List<User> users = userRoleMapper.SelectAll(page, pageNum);
        return users;
    }

    /**
     * 查所有用户对应的所有权限数量
     *
     * @return 用户对应的所有权限数量
     */
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
    @Override
    public Integer SelectAllCount() {
        Integer count = userRoleMapper.SelectAllCount();
        return count;
    }

    /**
     * 条件查询
     *
     * @param page        当前页
     * @param pageNum     每页显示条数
     * @param roleName    角色名称
     * @param roleRemarks 角色备注
     * @return 集合中的条件查询对象
     */
    @Override
    public List<User> SelectByUserRoleLike(Integer page, Integer pageNum, String roleName, String roleRemarks) {
        List<User> users = userRoleMapper.SelectByUserRoleLike(page, pageNum, roleName, roleRemarks);
        return users;
    }

    /**
     * 条件查询数量方法
     *
     * @param roleName    角色名称
     * @param roleRemarks 角色备注
     * @return 条件查询数量
     */
    @Override
    public Integer SelectByUserRoleLikeCount(String roleName, String roleRemarks) {
        Integer count = userRoleMapper.SelectByUserRoleLikeCount(roleName, roleRemarks);
        return count;
    }

    /**
     * 添加角色方法
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 添加状态
     */
    @Override
    public Integer Insert(Integer userId, Integer roleId) {
        Integer state = userRoleMapper.Insert(userId, roleId);
        return state;
    }

    /**
     * 修改角色方法
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 修改状态
     */
    @Override
    public Integer Update(Integer roleId, Integer userId) {
        Integer state = userRoleMapper.Update(roleId, userId);
        return state;
    }

    /**
     * 用户对应角色
     *
     * @return 集合中的用户对应角色信息
     */
    @Override
    public List<User> SelectByUserRole(Integer page, Integer pageNum) {
        List<User> userRoleVos = userRoleMapper.SelectByUserRole(page, pageNum);
        return userRoleVos;
    }

    /**
     * 用户对应角色数量
     *
     * @return 数量
     */
    @Override
    public Integer SelectByUserRoleCount() {
        Integer count = userRoleMapper.SelectByUserRoleCount();
        return count;
    }

    /**
     * 条件查询数量
     *
     * @param responsibleDepartment 科室名称
     * @param name                  人员名称
     * @return 人员数量
     */
    @Override
    public Integer SelectUserRoleLikeCount(String responsibleDepartment, String name) {
        Integer count = userRoleMapper.SelectUserRoleLikeCount(responsibleDepartment, name);
        return count;
    }

    /**
     * 条件查询
     *
     * @param responsibleDepartment 科室名称
     * @param name                  人员名称
     * @return 集合中的用户与角色信息
     */
    @Override
    public List<User> SelectUserRoleLike(Integer page, Integer pageNum, String responsibleDepartment, String name) {
        List<User> users = userRoleMapper.SelectUserRoleLike(page, pageNum, responsibleDepartment, name);
        return users;
    }

    /**
     * 删除方法
     *
     * @param userId 用户id
     * @return 删除状态
     */
    @Override
    public Integer Delete(Integer userId) {
        Integer state = userRoleMapper.Delete(userId);
        return state;
    }
}
